d = {'a':'py3'}

d.setdefault('a','py') #查找键a的值并返，如果不存在则设置键a的值 
print(d,d.setdefault('a','py'))

d = dict([('a',1),('b',2)])
print(d)
d = dict()
print('d=',d)
#defaultdict 
from collections import defaultdict,OrderedDict,Counter,UserDict

dd = defaultdict(list) #当查找某个键不存在时，会自动创建一个list实例作为该键的值
print(dd['a']) #会输出一个长度为0的list对象

odict = OrderedDict([('a',123),('name','kfz'),('age',25)]) #遍历的顺序按照插入的顺序 这是一个有顺序的字典
print(odict)
for k in odict:
    print(k)

cd = Counter("sdsdjklfklfkeossggkk") #返回各个字母出现的次数
print(cd)

#UserDict 一般用它作为基类来实现自定义的dict

class StrKeyDict(UserDict): #保证所有的key都是字符串
    def __missing__(self,key): #当找不到key的时候 会调用该方法
        print('__missing__ ',key)
        if isinstance(key,str):            
            raise KeyError(key)
        return self[str(key)]
    def __contains__(self,key):
        return str(key) in self.data
    def __setitem__(self,key,val):
        self.data[str(key)] = val

skd = StrKeyDict(name='kfz')
#print(skd['age'])


